package com.esunrising.esungsc.service;

import com.esunrising.esungsc.dto.FIGLZWPZ;
import com.esunrising.esungsc.entity.FIGLAccountingDocument;

import java.util.List;

public interface FIGLAccountingDocumentService extends BaseService<FIGLAccountingDocument> {


    /**
     * 删除已有GSC账务凭证头数据，再保存
     * @param accDoc 需要保存的GSC账务凭证头
     */
    void syncSave(FIGLAccountingDocument accDoc);

    /**
     * 调用API接口获取GSC账务凭证列表
     * @param dwbh 单位编号
     * @param orgCode 核算单位编号
     * @param kjnd 会计年度
     * @param sdate 数据更新时间起始，即取这个时间之后更新过的数据，格式  yyyy-mm-dd hh24:mi:ss, 如 2024-01-01 02:59:59；一般取上次调用接口的时间
     * @param edate 数据更新时间截至，即取这个时间之前更新过的数据，格式  yyyy-mm-dd hh24:mi:ss, 如 2024-03-31 23:59:59；一般取当前时间
     * @return 请求状态，“获取成功”或者失败原因
     */
    String voucherList(String dwbh, String orgCode, String kjnd, String sdate, String edate);
    /**
     * 调用API接口获取GSC账务凭证数据
     * @param year 会计年度
     * @param accOrgID 核算单位编号
     * @param lastChangedOn 获取同步日期；调用方记录获取日期，下次调用传输上次获取日期,获取此日期后的增量数据,格式: yyyy-MM-dd HH:mi:ss
     * @param endTime 插叙能结束时间
     * @param isFinish 是否完成；1-取单据状态为完成状态的凭证, 0-获取全部凭证（不传则默认为0）
     * @param isBook 是否已记账；1-获取已记账凭证, 0-获取全部凭证（不传则默认为1）
     * @param page 页数（默认1）
     * @param num 每页数据量（默认100）
     * @return GSC账务凭证数据
     */
    List<FIGLZWPZ> getApiVoucherList(String year, String accOrgID, String lastChangedOn, String endTime, String isFinish, String isBook, int page, int num);

    /**
     * 解析GSC账务凭证数据JSON字符串
     * @param jsonStr GSC账务凭证数据JSON字符串
     * @return GSC账务凭证数组
     */
    List<FIGLZWPZ> parseVoucher(String jsonStr);

    /**
     * GSC账务凭证存入数据库，包括账务凭证头、账务凭证分录、账务辅助原始;
     * 各部分主键重复的条目采取覆盖的方式
     * @param figlzwpz GSC账务凭证
     */
    void syncAccZWPZ(FIGLZWPZ figlzwpz);

    /**
     * GSC账务凭证数组存入数据库，包括账务凭证头、账务凭证分录、账务辅助原始;
     * 各部分主键重复的条目采取覆盖的方式
     * @param figlzwpzList GSC账务凭证数组
     */
    void syncAccZWPZList(List<FIGLZWPZ> figlzwpzList);

    /**
     * GSC账务凭证头数组存入数据库，其中ID重复的会覆盖
     * @param accDocList GSC账务凭证头数组
     */
    void syncAccDocList(List<FIGLAccountingDocument> accDocList);

}
